怎么将Java打开CSV文件到JTable展示

您所在的位置:网站首页 csv读取 java 怎么将Java打开CSV文件到JTable展示

怎么将Java打开CSV文件到JTable展示

2023-04-04 03:41| 来源: 网络整理| 查看: 265

怎么将Java打开CSV文件到JTable展示 发布时间:2023-03-31 14:31:07 来源:亿速云 阅读:74 作者:iii 栏目:开发技术

本文小编为大家详细介绍“怎么将Java打开CSV文件到JTable展示”,内容详细,步骤清晰,细节处理妥当,希望这篇“怎么将Java打开CSV文件到JTable展示”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。

概述主要知识点

a.SwingNode类 :把Java swing组件封装成一个JavaFX的Node,使得Java Swing可以和JavaFX嵌套在一起使用,JavaSwing贼丑,但操作简单,JavaFX的表格组件(TableView等)有点复杂,所以选择嵌套JavaSwing来使用,丑就丑吧

b.javacsv-2.0.jar: 用于通过文件地址读取csv文件,并可以进行一系列操作.尽管2008年之后就不再更新,但操作个csv文件也够用了。

c.FileChoose类 :JavaFX的一个文件选择器,可以打开本机的资源管理器,UI美观与否取决于你的系统版本。

d.CsvReader类 : javacsv-2.0.jar 包下的一个工具类,主要通过它来对csv文件进行操作

e.JTable类:创建一个JTable实例做csv文件打开后的展示,需要注意参数的顺序,表格内容是一个二维数组,表头是一个一维数组

JTable table = new JTable(表格内容,表头);

f. 把一位数组存进一维数组:

String[][] arr = new String[10][];//开辟一个10行的二维数组 String[] row1 = {"id","name","sex","age"};   arr[0] = row1;//存进二维数组

g. JTable不显示表头:需要把JTable对象放进一个Pane里

JTable table = new JTable(表内容,表头); JScrollPane jScrollPane = new JScrollPane(table);   SwingNode swingNode = new SwingNode(); swingNode.setContent(jScrollPane);//使用swingNode封装swing组件,就可以在Javafx中用了CsvReader的主要方法

new CsvReader(String filePath) 初始化构造时需要传入一个本地csv文件地址

boolean readHeaders() 读取表头并跳过

String[] getHeaders() 获取csv文件表头(很奇怪,需要readHeaders()方法调用过后,才能获取到,不然报空指针异常)

也就是这样:

CsvReader reader = new CsvReader("xxx.csv"); reader.readHeaders(); //没有这句话,执行下面会报错 String[] head = reader.getHeaders();

boolean readRecord() 读取一行csv内容,只要你调用了,下次再调用就会切换到csv的下一行,通常我们使用一个while循环来及时把所有内容一行行进行操作

String getRawRecord() 读取一行数据

while (reader.readRecord()){     System.out.println(reader.getRawRecord());//输出一行内容 }实例 - 读取本地桌面的一个csv文件@Override     public void start(Stage primaryStage) throws Exception {         primaryStage.setTitle("文件选择器");         primaryStage.setHeight(600);         primaryStage.setWidth(800);           final FileChooser fileChooser = new FileChooser();           //设置打开资源管理器后的文件过滤         fileChooser.getExtensionFilters().addAll(                 new FileChooser.ExtensionFilter("All Images","*.*"),                 new FileChooser.ExtensionFilter("PNG","*.png"),                 new FileChooser.ExtensionFilter("MP4","*.mp4"),                 new FileChooser.ExtensionFilter("CSV","*.csv")         );           final Button open = new Button("打开文件");           final GridPane inputGridPane = new GridPane();//创建格子布局面板         GridPane.setConstraints(open,0,0);//第0行0列           inputGridPane.setHgap(6.0);//设置水平间距         inputGridPane.setVgap(6.0);//设置垂直间距         inputGridPane.getChildren().addAll(open);//添加按钮           final Pane rootGroup = new VBox(12);//创建一个垂直盒子布局器         rootGroup.getChildren().addAll(inputGridPane);//把格子面板放进来         rootGroup.setPadding(new Insets(12,12,12,12));           primaryStage.setScene(new Scene(rootGroup));         primaryStage.show();   //设置点击-打开文件-的动作事件 open.setOnAction(event -> {             File file = fileChooser.showOpenDialog(primaryStage);//在当前窗口打开文件选择器             if (file != null){                 try {                     FileInputStream inputStream = new FileInputStream(file);                     BufferedInputStream stream = new BufferedInputStream(inputStream);                     String fileName = file.getName();                     String filePath = file.getAbsolutePath();                     System.out.println("文件路径 = "+filePath);                     try {                         CSVDemo.read(filePath);                     } catch (IOException e) {                         e.printStackTrace();                     }                         //封装JTable,使得JTable和Javafx嵌套在一起                         SwingNode swingNode = new SwingNode();                     try {                         JTable table = read(filePath);                         JScrollPane jScrollPane = new JScrollPane(table);                         swingNode.setContent(jScrollPane);                     } catch (IOException e) {                         e.printStackTrace();                     }                 //设置JTable打开后表格的相对位置                 GridPane.setConstraints(swingNode,0,1);                     inputGridPane.getChildren().add(swingNode);                 } catch (FileNotFoundException e) {                     e.printStackTrace();                 }             }         }); } //读取csv文件并把它读取到JTable中返回 public static JTable read(String filePath) throws IOException {               CsvReader reader = new CsvReader(filePath);             reader.readHeaders();//跳过表头             String[] head = reader.getHeaders();               List list = new ArrayList();             String s = reader.getRawRecord();             System.out.println("表头 "+s);             String[] r1 = dataToArray(s); //            list.add(r1);               while (reader.readRecord()) {                 System.out.println(reader.getRawRecord());                 list.add(dataToArray(reader.getRawRecord()));             }         String[][] data = new String[list.size()][];         System.out.println("一共"+list.size()+"行数据");         for (int i = 0; i 


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3